package com.william.jdbcplus.core.condition.crud;

import com.william.jdbcplus.common.page.IPage;
import com.william.jdbcplus.common.page.Page;

import java.util.List;
import java.util.Map;

/**
 * 查询获取数据
 *
 * @author niliwei
 */
public interface Read {
    /**
     * 查询 map 列表
     *
     * @return
     */
    List<Map<String, Object>> queryMapList();

    /**
     * 查询获取单个 map
     *
     * @return
     */
    Map<String, Object> queryMap();

    /**
     * 查询获取 map 分页
     *
     * @param page
     * @return
     */
    IPage<Map<String, Object>> queryMapPage(IPage<?> page);

    /**
     * 查询条数
     *
     * @return
     */
    Integer queryCount();

    /**
     * 查询获取一条数据
     *
     * @param clazz 类名
     * @param <M>
     * @return
     */
    <M> M queryOne(Class<M> clazz);

    /**
     * 查询列表
     *
     * @param clazz 类名
     * @param <M>
     * @return
     */
    <M> List<M> queryList(Class<M> clazz);

    /**
     * 查询分页
     *
     * @param page  分页条件
     * @param clazz 类名
     * @param <M>
     * @return
     */
    <M> Page<M> queryPage(IPage<?> page, Class<M> clazz);

    /**
     * 返回基本类型
     * 结果第一列表
     *
     * @return
     */
    <T> List<T> queryObjectList(Class<T> elementType);

    /**
     * 返回基本类型
     * 结果第一列第一行
     *
     * @return
     */
    <T> T queryObject(Class<T> elementType);
}
